Use case: ICACHE maintenance operations in polling mode ¶
This use case shows how to configure ICACHE and run maintenance operations (invalidate) in polling mode.
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
/* Configure ICACHE (optional) */
HAL_ICACHE_ConfigAssociativityMode(ICACHE_1WAY);
/* Enable monitors (optional) */
HAL_ICACHE_Monitor_Start();
/* Enable ICACHE */
HAL_ICACHE_Enable();
/* Maintenance operation (polling) */
if (HAL_ICACHE_Invalidate() != HAL_OK)
{
Error_Handler();
}
/* Read/Reset monitors (optional) */
(void)HAL_ICACHE_Monitor_GetHitValue();
(void)HAL_ICACHE_Monitor_GetMissValue();
HAL_ICACHE_Monitor_Reset();
/* Stop ICACHE */
HAL_ICACHE_Disable();
HAL_ICACHE_DeInit();
|
hal_icache_handle_t hicache1;
/* Init triggers a HW invalidate */
if (HAL_ICACHE_Init(&hicache1, HAL_ICACHE1) != HAL_OK)
{
Error_Handler();
}
/* Optional configuration */
(void)HAL_ICACHE_SetAssociativityMode(&hicache1, HAL_ICACHE_ASSOCIATIVITY_1WAY);
(void)HAL_ICACHE_EnableMonitors(&hicache1);
/* Start ICACHE */
if (HAL_ICACHE_Start(&hicache1, HAL_ICACHE_IT_NONE) != HAL_OK)
{
Error_Handler();
}
/* Maintenance operation (polling) */
if (HAL_ICACHE_Invalidate(&hicache1) != HAL_OK)
{
Error_Handler();
}
/* Optional monitors */
(void)HAL_ICACHE_GetMonitorHitValue(&hicache1);
(void)HAL_ICACHE_GetMonitorMissValue(&hicache1);
(void)HAL_ICACHE_ResetMonitors(&hicache1);
/* Stop ICACHE */
(void)HAL_ICACHE_Stop(&hicache1);
(void)HAL_ICACHE_DeInit(&hicache1);
|
Key changes ¶
HAL2 uses an explicit handle-based init/start/stop flow (
HAL_ICACHE_Init(),HAL_ICACHE_Start(),HAL_ICACHE_Stop()), replacing the HAL1 enable/disable approach.Monitor and configuration APIs are renamed and handle-based in HAL2 (
HAL_ICACHE_EnableMonitors(),HAL_ICACHE_GetMonitor*(),HAL_ICACHE_ResetMonitors()).HAL2 may automatically invalidate the cache during initialization (hardware invalidate on
HAL_ICACHE_Init()).
![@startuml
skinparam sequenceMessageAlign center
participant "User\nApplication" as UA
participant "ICACHE\nDriver" as ID
group Loop [Can be repeated]
group Optional
UA->ID : **HAL_ICACHE_ConfigAssociativityMode**
ID --> UA : return HAL_OK
UA->ID : **HAL_ICACHE_Monitor_Start**
ID --> UA : return HAL_OK
|||
end
UA->ID : **HAL_ICACHE_Enable**
ID --> UA : return HAL_OK
group Loop [Can be repeated]
UA->ID : **HAL_ICACHE_Invalidate**
ID --> UA : return HAL_OK, HAL_BUSY, HAL_ERROR, HAL_TIMEOUT
|||
end
group Optional
UA->ID : **HAL_ICACHE_Monitor_GetHitValue**, **HAL_ICACHE_Monitor_GetMissValue**
ID --> UA : Monitor's value
UA->ID : **HAL_ICACHE_Monitor_Reset**
ID --> UA : return HAL_OK
end
UA->ID : **HAL_ICACHE_Disable**
ID --> UA : return HAL_OK
end
UA->ID : **HAL_ICACHE_DeInit**
ID --> UA
@enduml](../../../../../_images/plantuml-cf5eabb4e0314acb41f821788c640ae225a3ddfb.png)
![@startuml
skinparam sequenceMessageAlign center
participant "User\nApplication" as UA
participant "ICACHE\nDriver" as ID
UA->ID : **HAL_ICACHE_Init**
rnote over ID
Invalidate operation by hardware
endrnote
UA <-- ID : return HAL_OK or HAL_INVALID_PARAM
|||
group Loop [Can be repeated]
group Optional
UA->ID : **HAL_ICACHE_SetAssociativityMode**
ID --> UA : return HAL_OK
UA->ID : **HAL_ICACHE_ECC_Enable**
note right : ECC is only available on some STM32 devices\nCheck the reference manual of your product
ID --> UA : return HAL_OK
UA->ID : **HAL_ICACHE_EnableMonitors**
ID --> UA : return HAL_OK
|||
end
UA->ID : **HAL_ICACHE_Start**
note right : Choose to enable write intrusion error interrupt
ID --> UA : return HAL_OK
group Loop [Can be repeated]
UA->ID : **HAL_ICACHE_Invalidate**
ID --> UA : return HAL_OK, HAL_BUSY, HAL_ERROR
|||
end
group Optional
UA->ID : **HAL_ICACHE_GetMonitorHitValue**, **HAL_ICACHE_GetMonitorMissValue**
ID --> UA : Monitor's value
UA->ID : **HAL_ICACHE_ResetMonitors**
ID --> UA : return HAL_OK
UA->ID : **HAL_ICACHE_ECC_Disable**
note right : ECC is only available on some STM32 devices\nCheck the reference manual of your product
ID --> UA : return HAL_OK
|||
end
UA->ID : **HAL_ICACHE_Stop**
ID --> UA : return HAL_OK
|||
end
UA->ID : **HAL_ICACHE_DeInit**
ID --> UA
@enduml](../../../../../_images/plantuml-85c78464ba24ff9f5fa900ba45f47f286c605d31.png)